package com.golden.order02.service;

import java.util.List;

import com.golden.order02.domain.OpenOrderDO;
import com.golden.order02.domain.OrderCashierDO;
import com.golden.order02.domain.OrderDO;
import com.golden.order02.domain.OrderHisItemDO;
import com.golden.order02.domain.OrderHisSalesDO;
import com.golden.order02.domain.OrderHisSessionDO;
import com.golden.order02.domain.OrderListDO;
import com.golden.order02.domain.OrderSessionDO;
import com.golden.order02.domain.PriceDO;
import com.golden.order02.domain.ResultDO;
import com.golden.order02.queryDO.OrderQueryDO;

public interface OrderGroupService {
	
	//开单（添加Order表  —— Order记录  ）
	/**
	 * 
	* <b>Description: 点击开单时候用</b><br> 
	* @param id 线索ID
	* @return
	* ResultDO 开单成功返回order<OrderDO> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月28日 下午6:01:30
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<OrderHisSalesDO> openOrder(Integer customerID ,Integer leadID);
	
	/**
	 * 
	* <b>Description: 点击套系 的时候 添加商品</b><br> 
	* @param packageID
	* @param code
	* @param orderHisSalesID
	* @return
	* ResultDO<Boolean> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月28日 下午6:11:19
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<OrderHisSalesDO> addPackage(Integer packageID,Integer orderHisSalesID);
	/**
	 * 
	* <b>Description:添加商品</b><br> 
	* @param product 商品ID  包括服务  商品
	* @param type 1为商品  2为服务
	* @param orderHisSalesID 销售记录ID
	* @return  返回添加成功与否
	* ResultDO<Boolean> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月29日 上午10:04:05
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<OrderHisItemDO> addProduct(OrderHisItemDO beanDO);
	
	/**
	 * 
	* <b>Description: 用来做替换</b><br> 
	* @param orderHisSalesID 销售记录ID 
	* @param type 1 为商品  2为服务
	* @param productID  产品 或者服务ID
	* @return 返回成功与否
	* ResultDO<Boolean> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月29日 上午10:12:49
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<Boolean> replaceProduct(Integer orderHisItemID ,Integer type,Integer productID);
	
	/**
	 * 
	* <b>Description:修改商品基础信息</b><br> 
	* @param beanDO
	* @return 
	* ResultDO<Boolean> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月29日 上午10:19:28
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<Boolean> updateProduct(OrderHisItemDO beanDO);
	
	public ResultDO<Boolean> updateScene(OrderHisSessionDO beanDO);
	
	
	/**
	 * 
	* <b>Description:场馆修改</b><br> 
	* @param beanDO
	* @return
	* ResultDO<Boolean> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年9月29日 上午10:27:48
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<Boolean> replaceScene(OrderHisSessionDO beanDO );
	
	//以下为查询接口
	//查询价格
	public ResultDO<PriceDO> getOrderPrice(Integer orderID);
	/**
	 * 
	* <b>Description:查询场次</b><br> 
	* @param orderHisSalesID 销售记录ID
	* @return 返回当前销售记录的场次
	* ResultDO<List<OrderHisSessionDO>> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年11月6日 下午6:06:42
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<List<OrderHisSessionDO>> getGroup(Integer orderHisSalesID);
	
	/**
	 * 
	* <b>Description: 订单的产品清单列表返回产品</b><br> 
	* @param orderHisSessionID 场次ID
	* @return 返回当前分组的里面的商品
	* ResultDO<List<OrderHisItemDO>> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年11月6日 下午6:07:32
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<List<OrderHisItemDO>> getProduct(Integer orderHisSessionID);
	
	/**
	 * 
	* <b>Description:返回服务列表</b><br> 
	* @param orderHisSessionID 场次ID
	* @return 返回当前分组的里面的服务
	* ResultDO<List<OrderHisItemDO>> 
	* @Note
	* <b>Author:</b> Reading.Reagan
	* <br><b>Date:</b> 2018年11月6日 下午6:11:29
	* <br><b>Version:</b> 1.0
	 */
	public ResultDO<List<OrderHisItemDO>> getService(Integer orderHisSessionID);
	
	//开单方法
	public ResultDO<Boolean> OpenOrder(OpenOrderDO beanDO);
	
	public ResultDO<Boolean> OpenOrderUpgrade(OpenOrderDO beanDO);
	
	public ResultDO<List<OrderListDO>> list(OrderQueryDO query);
	
	public ResultDO<List<OrderSessionDO>> getOrderSession(Integer orderId);
	
	public ResultDO<OrderDO> upgradeOrder(Integer orderId);
	
	//把未分组 和当前场次复制过去
	public ResultDO<OrderHisSalesDO> AddOrder(Integer orderSessionID);
	
	public ResultDO<Boolean> updateOrder(OrderCashierDO order);
	
	public ResultDO<Boolean> cancelOrder(Integer id,Integer modifyName);
	
}
